ThreadLocal这个概念很重要,面试也是经常问,由此可见大多数人不容易掌握这个知识点。其实其实现原理非常简单,简单理解“Thread”即线程,“Local”即本地。连续起来理解就是每个线程本地独有的。强烈你推荐看下面的概念引入,我将叙述为什么会有这个概念的出现。
概念引入
现在的软件开发过程中,并发是很重要的手段。由此而带来的语言层面的切入点就是线程了,引入多线程开发之后,自然要考虑好同步、互斥、安全等内容。而因为这些需求就出现了以下三种来实现线程安全的手段。
互斥同步
简单点理解就是通过加锁来实现对临界资源的访问限制。加锁方式有Synchorized和Lock。
非阻塞同步
前面提到的互斥同步属于一种悲观锁机制,非阻塞同步属于乐观锁机制。典型的实现方式就是CAS操作。
无同步方案
要保证线程安全,并不是一定就需要同步,两者没有因果关系,同步只是保证共享数据征用时正确性的手段,如果一个方法本来就不涉及共享数据,那它就不需要任何同步措施去保证正确性。ThreadLocal的概念就是从这里引申出来的。